home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
BASIC
/
LIB
/
EVENTSHELL
/
EXTENSION
/
ColourPick
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1996-02-11
|
20KB
|
436 lines
Module ColourPick
-----------------------------------------------------------------------
ColourPick Handling Routines (version 1.13 11-Feb-96)
This library contains routines that implement a 24 bit colour
chooser dialog box. If the Acorn module 'Colour Picker' is loaded
(part of Risc OS 3.5 but it will work with 3.1) then you have the
choice of which dialog box to use. The EvntShell version is a little
smaller and has a few more features although it only supports the
RGB colour model. Default behaviour is to use the Acorn version.
-----------------------------------------------------------------------
Public Methods Supported:
FN_shell_ColourPick_Init Initialises module
FNshell_ColourPickerModuleLoaded Checks whether Acorn module is loaded
FNshell_ColourPickerUsingStandard
PROCshell_AttachPopupColourPicker Attaches the ColourPicker to a window/icon
PROCshell_ColourPickerAllowColourNone
PROCshell_ColourPickerSetColour
PROCshell_ColourPickerUseNonStandard
PROCshell_ColourPickerUseStandard
Responses to events raised by other modules
PROCshell_ColourPickerOpen
Private Methods Supported:
PROCshell_ColourPickerSelection
FN_ColourPicker_PreOpen
FN_ColourPicker_Redraw
FN_ColourPicker_SliderChanged
FN_ColourPicker_ClickSelect
FN_ColourPicker_ClickAdjust
FN_ColourPicker_IconWatch1
FN_ColourPicker_IconWatch2
FN_ColourPicker_IconWatch3
Message Strings required by module
*$*|Start FN_shell_ColourPick_Init
_shell_ColourPick_Init
ON ERROR MODE 12:SYS "Hourglass_Smash":PRINT REPORT$;" at line "+STR$ ERL:END
Define Constants
/J_c_ColourPick_WindowName$ = "Colour24" :
Template identifier
Define module variables
2@_m_ColourPick_DBoxHandle% = -1 :
DBox window handle
3d_m_ColourPick_NotifyFN$ = "" :
FN to call when selection is made in colourpicker dbox
4^_m_ColourPick_PreOpenFN$ = "" :
User FN to call before opening colourpicker dbox
5V_m_ColourPick_WindowHandle% = -1 :
Handle of window containing display icon
6[_m_ColourPick_DisplayIcon% = -1 :
Handle of icon to display resulting selection
7=_m_ColourPick_SliderR% = -1 :
Slider Handle R
8=_m_ColourPick_SliderB% = -1 :
Slider Handle G
9=_m_ColourPick_SliderG% = -1 :
Slider Handle B
:o_m_ColourPick_R_Value = 100 :
Initial Red % value (in case the programmer forgets to set it!)
;K_m_ColourPick_G_Value = 100 :
Initial Green % value (ditto)
<K_m_ColourPick_B_Value = 100 :
Initial Blue % value (ditto)
>&_m_ColourPick_First_Col_Icon% = 24
?&_m_ColourPick_Last_Col_Icon% = 39
@&_m_ColourPick_None_Icon% = 23
A%_m_ColourPick_OK_Icon% = 0
B%_m_ColourPick_Cancel_Icon% = 1
D%_m_ColourPick_AllowNone% =
E%_m_ColourPick_EvntsAttached% =
G%_m_ColourPick_UseRGBModel% = 0
H&_m_ColourPick_DialogHandle% = -1
I&_m_ColourPick_DBoxHandle% = -1
K^_m_ColourPick_Patch_X_Min% = 200 :
Position of colour patch relative to DBox origin
L(_m_ColourPick_Patch_Y_Min% = -300
M'_m_ColourPick_Patch_X_Max% = 450
N(_m_ColourPick_Patch_Y_Max% = -250
P _m_ColourPick_OSVarLen% = 2
Q!_m_ColourPick_OSVarTerm% = 13
_m_ColourPick_OSVarBuffer% _m_ColourPick_OSVarLen%
Workspace for calls to ColourPicker module..
_m_ColourPick_WorkSpace% 44
Initialise Dialog Box title..
X#_m_ColourPick_TitleLength% = 20
_m_ColourPick_Title% _m_ColourPick_TitleLength%
Z2$_m_ColourPick_Title% = "Colour" +
( 0 )
Set default dialog box depending on whether Acorn version is available
shell_ColourPickerUseStandard
_m_ColourPick_PaletteBlk% 4
c%*|extract FN_ColourPicker_PreOpen
d)*|extract PROC_ColourPicker_Selection
e$*|extract FN_ColourPicker_Redraw
f+*|extract FN_ColourPicker_SliderChanged
g)*|extract FN_ColourPicker_ClickSelect
h)*|extract FN_ColourPicker_ClickAdjust
i(*|extract FN_ColourPicker_IconWatch1
j(*|extract FN_ColourPicker_IconWatch2
k(*|extract FN_ColourPicker_IconWatch3
m#*|Stop FN_shell_ColourPick_Init
q1*|Start PROCshell_ColourPickerAllowColourNone
shell_ColourPickerAllowColourNone( flag% )
flag% =
t" _m_ColourPick_AllowNone% =
v" _m_ColourPick_AllowNone% =
z0*|Stop PROCshell_ColourPickerAllowColourNone
~-*|Start PROCshell_AttachPopupColourPicker
shell_AttachPopupColourPicker( wh%, menuic%, dispic%, notify_fn$, preopen_FN$ )
shell_WindowLoaded( _c_ColourPick_WindowName$ )
wh% > 0
menuic% >= 0
shell_IconSetButtonType( wh%, menuic%, 3 )
shell_EvntAdd_PopUpMenu(
shell_GetWindowIdentifier( wh% ), menuic%, dispic%, -1, notify_fn$, preopen_FN$, _POPUP_TYPE_COLOUR24 )
99,
shell_MessageOneArg( "SHELLMSG37", _c_ColourPick_WindowName$ )
,*|Stop PROCshell_AttachPopupColourPicker
&*|Start PROCshell_ColourPickerOpen
shell_ColourPickerOpen( window_handle%, display_icon%, menu_icon%, notify_FN$, preopen_FN$ )
Opens the ColourPicker dbox and calls the specified routine when a selection
is made.
colourpicker_flags%, palette_entry%
"Hourglass_On"
(_m_ColourPick_NotifyFN$ = notify_FN$
shell_ColourPickerUsingStandard =
2 _m_ColourPick_WindowHandle% = window_handle%
1 _m_ColourPick_DisplayIcon% = display_icon%
/ _m_ColourPick_PreOpenFN$ = preopen_FN$
shell_OpenWindowDynamic( _c_ColourPick_WindowName$, "_ColourPicker_PreOpen", "" )
? _m_ColourPick_DBoxHandle% =
shell_GetDynamicWindowHandle
Set up colour picker block (see PRM 5-247)
8 colourpicker_flags% = 1 :
dialog box is transient
_m_ColourPick_AllowNone% =
% !_m_ColourPick_WorkSpace% = 1
% !_m_ColourPick_WorkSpace% = 0
shell_IconGetBoundingBox( window_handle%, menu_icon%, xmin%, ymin%, xmax%, ymax% )
8 _m_ColourPick_WorkSpace%!04 = _m_ColourPick_Title%
) _m_ColourPick_WorkSpace%!08 = xmax%
? _m_ColourPick_WorkSpace%!12 = &80000000 :
Reserved word
? _m_ColourPick_WorkSpace%!16 = &7FFFFFFF :
Reserved word
) _m_ColourPick_WorkSpace%!20 = ymin%
? _m_ColourPick_WorkSpace%!24 = 0 :
Reserved word
? _m_ColourPick_WorkSpace%!28 = 0 :
Reserved word
palette_entry% = ( ( _m_ColourPick_B_Value * 2.55 ) << 24 ) + ( ( _m_ColourPick_G_Value * 2.55 ) << 16 ) + ( ( _m_ColourPick_R_Value * 2.55 )<< 8 )
2 _m_ColourPick_WorkSpace%!32 = palette_entry%
J _m_ColourPick_WorkSpace%!36 = 0 :
size of optional extension block
_m_ColourPick_WorkSpace%!40 = _m_ColourPick_UseRGBModel%
"ColourPicker_OpenDialogue", colourpicker_flags%, _m_ColourPick_WorkSpace%
_m_ColourPick_DialogHandle%, _m_ColourPick_DBoxHandle%
SYS "ColourPicker_UpdateDialogue", 1 << 6, _m_ColourPick_DialogHandle%, _m_ColourPick_WorkSpace%
shell_WindowMoveToPopUpPos( window_handle%, menu_icon%, _m_ColourPick_DBoxHandle% )
"Hourglass_Off"
%*|Stop PROCshell_ColourPickerOpen
#*|Start FN_ColourPicker_PreOpen
_ColourPicker_PreOpen( window_handle% )
void%
shell_ColourPickerUsingStandard =
0 _m_ColourPick_DBoxHandle% = window_handle%
_m_ColourPick_EvntsAttached% =
_m_ColourPick_SliderR% =
shell_AttachSliderHandler(_m_ColourPick_DBoxHandle%,5,6,2,8,7,"_ColourPicker_SliderR_Changed")
_m_ColourPick_SliderG% =
shell_AttachSliderHandler(_m_ColourPick_DBoxHandle%,12,13,9,15,14,"_ColourPicker_SliderG_Changed")
_m_ColourPick_SliderB% =
shell_AttachSliderHandler(_m_ColourPick_DBoxHandle%,19,20,16,22,21,"_ColourPicker_SliderB_Changed")
^
shell_AttachClickSelect( _m_ColourPick_DBoxHandle%, -1, "_ColourPicker_ClickSelect" )
]
shell_AttachClickAdjust( _m_ColourPick_DBoxHandle%, 0, "_ColourPicker_ClickAdjust" )
T
shell_AttachUserRedraw( _m_ColourPick_DBoxHandle%, "_ColourPicker_Redraw" )
H
shell_AttachHelpTag( _m_ColourPick_DBoxHandle%, -1, "c24dbox" )
Y
shell_AttachIconWatch( _m_ColourPick_DBoxHandle%, 02, "_ColourPick_IconWatch1" )
Y
shell_AttachIconWatch( _m_ColourPick_DBoxHandle%, 09, "_ColourPick_IconWatch2" )
Y
shell_AttachIconWatch( _m_ColourPick_DBoxHandle%, 16, "_ColourPick_IconWatch3" )
( _m_ColourPick_EvntsAttached% =
PROCshell_SliderSetValue( _m_ColourPick_SliderR%, _m_ColourPick_R_Value )
PROCshell_SliderSetValue( _m_ColourPick_SliderG%, _m_ColourPick_G_Value )
PROCshell_SliderSetValue( _m_ColourPick_SliderB%, _m_ColourPick_B_Value )
Call User PreOpen FN here...
_m_ColourPick_PreOpenFN$ <> ""
U void% =
( "FN" + _m_ColourPick_PreOpenFN$ + "( " +
window_handle% + " )" )
_m_ColourPick_AllowNone% =
\
shell_IconSetUnselectable( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon%, 0 )
V
shell_IconUnselectable( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon% )
"*|Stop FN_ColourPicker_PreOpen
+*|Start FN_ColourPicker_SliderR_Changed
_ColourPicker_SliderR_Changed( value% )
shell_ColourPickerUsingStandard =
_m_ColourPick_DBoxHandle% <> -1
PROCshell_SliderSetValue( _m_ColourPick_SliderR%, value% )
shell_IconDeselect( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon% )
"Wimp_ForceRedraw", _m_ColourPick_DBoxHandle%, _m_ColourPick_Patch_X_Min%, _m_ColourPick_Patch_Y_Min%, _m_ColourPick_Patch_X_Max% + 4, _m_ColourPick_Patch_Y_Max% + 4
**|Stop FN_ColourPicker_SliderR_Changed
+*|Start FN_ColourPicker_SliderG_Changed
_ColourPicker_SliderG_Changed( value% )
shell_ColourPickerUsingStandard =
_m_ColourPick_DBoxHandle% <> -1
PROCshell_SliderSetValue( _m_ColourPick_SliderG%, value% )
$ _m_ColourPick_G_Value = value%
shell_IconDeselect( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon% )
"Wimp_ForceRedraw", _m_ColourPick_DBoxHandle%, _m_ColourPick_Patch_X_Min%, _m_ColourPick_Patch_Y_Min%, _m_ColourPick_Patch_X_Max% + 4, _m_ColourPick_Patch_Y_Max% + 4
**|Stop FN_ColourPicker_SliderG_Changed
+*|Start FN_ColourPicker_SliderB_Changed
_ColourPicker_SliderB_Changed( value% )
shell_ColourPickerUsingStandard =
_m_ColourPick_DBoxHandle% <> -1
PROCshell_SliderSetValue( _m_ColourPick_SliderB%, value% )
$ _m_ColourPick_B_Value = value%
shell_IconDeselect( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon% )
"Wimp_ForceRedraw", _m_ColourPick_DBoxHandle%, _m_ColourPick_Patch_X_Min%, _m_ColourPick_Patch_Y_Min%, _m_ColourPick_Patch_X_Max% + 4, _m_ColourPick_Patch_Y_Max% + 4
**|Stop FN_ColourPicker_SliderB_Changed
'*|Start FN_ColourPicker_ClickSelect
_ColourPicker_ClickSelect( window_handle%, icon_handle% )
wimp_colour_nr%, R_Value, G_Value, B_Value, Palette_Entry%
icon_handle% = _m_ColourPick_Cancel_Icon%
shell_CloseWindow( window_handle% )
icon_handle% = _m_ColourPick_OK_Icon%
shell_IsIconSelected( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon% )
R_Value = -1
G_Value = -1
B_Value = -1
%A R_Value =
shell_SliderGetValue( _m_ColourPick_SliderR% )
&A G_Value =
shell_SliderGetValue( _m_ColourPick_SliderG% )
'A B_Value =
shell_SliderGetValue( _m_ColourPick_SliderB% )
_m_ColourPick_NotifyFN$ <> ""
+r void% =
( "FN" + _m_ColourPick_NotifyFN$ + "( " +
R_Value + ", " +
G_Value + ", "+
B_Value + " )" )
icon_handle% = _m_ColourPick_None_Icon%
"Wimp_ForceRedraw", _m_ColourPick_DBoxHandle%, _m_ColourPick_Patch_X_Min%, _m_ColourPick_Patch_Y_Min%, _m_ColourPick_Patch_X_Max% + 4, _m_ColourPick_Patch_Y_Max% + 4
icon_handle% >= _m_ColourPick_First_Col_Icon%
icon_handle% <= _m_ColourPick_Last_Col_Icon%
5D wimp_colour_nr% = icon_handle% - _m_ColourPick_First_Col_Icon%
wimp_colour_nr% = 0
R_Value = 100 :G_Value = 100 :B_Value = 100
wimp_colour_nr% = 1
R_Value = 86.7 :G_Value = 86.7 :B_Value = 86.7
wimp_colour_nr% = 2
R_Value = 73.3 :G_Value = 73.3 :B_Value = 73.3
wimp_colour_nr% = 3
R_Value = 60 :G_Value = 60 :B_Value = 60
wimp_colour_nr% = 4
R_Value = 46.6 :G_Value = 46.6 :B_Value = 46.6
wimp_colour_nr% = 5
R_Value = 33.3 :G_Value = 33.3 :B_Value = 33.3
wimp_colour_nr% = 6
R_Value = 20 :G_Value = 20 :B_Value = 20
wimp_colour_nr% = 7
R_Value = 0 :G_Value = 0 :B_Value = 0
wimp_colour_nr% = 8
R_Value = 0 :G_Value = 26.6 :B_Value = 60
wimp_colour_nr% = 9
R_Value = 93.3 :G_Value = 93.3 :B_Value = 0
wimp_colour_nr% = 10
R_Value = 0 :G_Value = 80 :B_Value = 0
wimp_colour_nr% = 11
R_Value = 86.7 :G_Value = 0 :B_Value = 0
wimp_colour_nr% = 12
R_Value = 93.3 :G_Value = 93.3 :B_Value = 73.3
wimp_colour_nr% = 13
R_Value = 33.3 :G_Value = 53.3 :B_Value = 0
wimp_colour_nr% = 14
R_Value = 100 :G_Value = 73.3 :B_Value = 0
wimp_colour_nr% = 15
R_Value = 0 :G_Value = 73.3 :B_Value = 100
shell_SliderSetValue( _m_ColourPick_SliderR%, R_Value )
shell_SliderSetValue( _m_ColourPick_SliderG%, G_Value )
shell_SliderSetValue( _m_ColourPick_SliderB%, B_Value )
shell_IconDeselect( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon% )
"Wimp_ForceRedraw", _m_ColourPick_DBoxHandle%, 200, -300, 450, -240
M&*|Stop FN_ColourPicker_ClickSelect
Q'*|Start FN_ColourPicker_ClickAdjust
_ColourPicker_ClickAdjust( window_handle%, icon_handle% )
R_Value, G_Value, B_Value, void%
icon_handle%
_m_ColourPick_OK_Icon%
XX
shell_IsIconSelected( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon% )
R_Value = -1
G_Value = -1
B_Value = -1
\
]C R_Value =
shell_SliderGetValue( _m_ColourPick_SliderR% )
^C G_Value =
shell_SliderGetValue( _m_ColourPick_SliderG% )
_C B_Value =
shell_SliderGetValue( _m_ColourPick_SliderB% )
`
b)
_m_ColourPick_NotifyFN$ <> ""
ct void% =
( "FN" + _m_ColourPick_NotifyFN$ + "( " +
R_Value + ", " +
G_Value + ", "+
B_Value + " )" )
d
j&*|Stop FN_ColourPicker_ClickAdjust
n"*|Start FN_ColourPicker_Redraw
_ColourPicker_Redraw( redraw_blk%, x0%, y0% )
Palette_Entry%, R_Value, G_Value, B_Value, loop%
shell_ColourPickerUsingStandard =
nr_lines% = 24
spacing% = 16
offset% = 9
shell_IsIconSelected( _m_ColourPick_DBoxHandle%, _m_ColourPick_None_Icon% )
xL
x0% + _m_ColourPick_Patch_X_Min%, y0% + _m_ColourPick_Patch_Y_Min%
yL
x0% + _m_ColourPick_Patch_X_Max%, y0% + _m_ColourPick_Patch_Y_Min%
zL
x0% + _m_ColourPick_Patch_X_Max%, y0% + _m_ColourPick_Patch_Y_Max%
{L
x0% + _m_ColourPick_Patch_X_Min%, y0% + _m_ColourPick_Patch_Y_Max%
|L
x0% + _m_ColourPick_Patch_X_Min%, y0% + _m_ColourPick_Patch_Y_Min%
loop% = 0
nr_lines%
~d
x0% + _m_ColourPick_Patch_X_Min% + (loop% * spacing% ), y0% + _m_ColourPick_Patch_Y_Min%
o
x0% + _m_ColourPick_Patch_X_Min% + (loop% * spacing% ) + spacing%, y0% + _m_ColourPick_Patch_Y_Max%
loop%
H R_Value =
shell_SliderGetValue( _m_ColourPick_SliderR% ) * 2.55
H G_Value =
shell_SliderGetValue( _m_ColourPick_SliderG% ) * 2.55
H B_Value =
shell_SliderGetValue( _m_ColourPick_SliderB% ) * 2.55
Q Palette_Entry% = ( B_Value << 24 ) + ( G_Value << 16 ) + ( R_Value << 8 )
<
"ColourTrans_SetGCOL", Palette_Entry%, , , 256, 0
x0% + _m_ColourPick_Patch_X_Min%, y0% + _m_ColourPick_Patch_Y_Min%, _m_ColourPick_Patch_X_Max% - _m_ColourPick_Patch_X_Min%, _m_ColourPick_Patch_Y_Max% - _m_ColourPick_Patch_Y_Min%
!*|Stop FN_ColourPicker_Redraw
+*|Start PROCshell_ColourPickerSetColour
shell_ColourPickerSetColour( R_Value, G_Value, B_Value )
shell_ColourPickerUsingStandard =
shell_SliderSetValue( _m_ColourPick_SliderR%, R_Value )
shell_SliderSetValue( _m_ColourPick_SliderG%, G_Value )
shell_SliderSetValue( _m_ColourPick_SliderB%, B_Value )
IF INKEY(-1) THEN ERROR 99,STR$R_Value+":"+STR$G_Value+":"+STR$B_Value
**|Stop PROCshell_ColourPickerSetColour
$*|Start FN_ColourPick_IconWatch1
_ColourPick_IconWatch1( value$ )
shell_ColourPickerUsingStandard =
shell_SliderSetValue( _m_ColourPick_SliderR%,
( value$ ) )
#*|Stop FN_ColourPick_IconWatch1
$*|Start FN_ColourPick_IconWatch2
_ColourPick_IconWatch2( value$ )
shell_ColourPickerUsingStandard =
shell_SliderSetValue( _m_ColourPick_SliderG%,
( value$ ) )
#*|Stop FN_ColourPick_IconWatch2
$*|Start FN_ColourPick_IconWatch3
_ColourPick_IconWatch3( value$ )
shell_ColourPickerUsingStandard =
shell_SliderSetValue( _m_ColourPick_SliderB%,
( value$ ) )
#*|Stop FN_ColourPick_IconWatch3
,*|Start FNshell_ColourPickerModuleLoaded
shell_ColourPickerModuleLoaded
Routine to check whether the Acorn 'Colour Picker' module is available.
Returns TRUE is it is, FALSE otherwise.
len%,result$, return_code%
( "Set Module$Check Y" )
( "RMEnsure ColourPicker 0.15 Set Module$Check N" )
"OS_ReadVarVal","Module$Check", _m_ColourPick_OSVarBuffer%, _m_ColourPick_OSVarLen%, 0 , 0
, , len%
>_m_ColourPick_OSVarBuffer%?len% = _m_ColourPick_OSVarTerm%
( "Unset Module$Check" )
)result$ = $_m_ColourPick_OSVarBuffer%
result$ = "N"
return_code% =
return_code% =
= return_code%
+*|Stop FNshell_ColourPickerModuleLoaded
0*|Start PROCshell_ColourPickerUseNonStandard
shell_ColourPickerUseNonStandard
'_m_ColourPick_DBox$ = "NonStandard"
/*|Stop PROCshell_ColourPickerUseNonStandard
-*|Start PROCshell_ColourPickerUseStandard
shell_ColourPickerUseStandard
shell_ColourPickerModuleLoaded
& _m_ColourPick_DBox$ = "Standard"
) _m_ColourPick_DBox$ = "NonStandard"
,*|Stop PROCshell_ColourPickerUseStandard
-*|Start FNshell_ColourPickerUsingStandard
shell_ColourPickerUsingStandard
return_code%
_m_ColourPick_DBox$ = "Standard"
return_code% =
return_code% =
= return_code%
,*|Stop FNshell_ColourPickerUsingStandard
+*|Start PROCshell_ColourPickerSelection
shell_ColourPickerSelection( palette_entry%, colour_none_selected% )
Called when OK has been selected in the Acorn colour picker
dialogue box only..
void%, R_Value, G_Value, B_Value
colour_none_selected% =
1 !_m_ColourPick_PaletteBlk% = palette_entry%
6 B_Value = ( _m_ColourPick_PaletteBlk%?3 ) / 2.55
6 G_Value = ( _m_ColourPick_PaletteBlk%?2 ) / 2.55
6 R_Value = ( _m_ColourPick_PaletteBlk%?1 ) / 2.55
B_Value = -1
G_Value = -1
R_Value = -1
_m_ColourPick_NotifyFN$ <> ""
p void% =
( "FN" + _m_ColourPick_NotifyFN$ + "( " +
R_Value + ", " +
G_Value + ", "+
B_Value + " )" )
**|Stop PROCshell_ColourPickerSelection